第 2 章  ·  监督微调(二)-三个关键要素

第2章 第8节 监督微调(二)-三个关键要素


第2章 第8节 监督微调(二)-三个关键要素

阅读指南

上一节了解了监督微调的概念:在预训练模型基础上,用人工标注的问答对进行额外训练。

本节将系统分解监督微调的过程,看看数据从哪里来、模型如何学习、参数如何更新。

8.1 要素一:高质量的问答对数据

这是监督微调的核心。那么,数据从哪里来?

主要有两个来源:

  1. 人工编写

由AI训练师、众包工作者编写问答对:

问题:"什么是机器学习?"
答案:"机器学习是一种人工智能技术,它让计算机能够从数据中学习规律,
而不需要明确编程。例如,通过分析大量的猫的图片,机器学习算法
能够自动学会识别猫,而不需要人工告诉它'猫有尖耳朵、长胡须'
这些规则。"

问题:"如何做番茄炒蛋?"
答案:"番茄炒蛋的做法:

  1. 准备2个鸡蛋,2个番茄,适量盐和糖
  2. 鸡蛋打散,加少许盐,炒熟盛出
  3. 番茄切块,炒出汁水
  4. 加入炒好的鸡蛋,翻炒均匀
  5. 加盐和少许糖调味即可"
  1. 从现有数据中筛选

从互联网上筛选高质量的问答数据:

筛选标准:

✓ 问题清晰
✓ 答案准确、有帮助
✓ 语言规范、友好

数据量有多少?

相比预训练的3000亿词,监督微调的数据量少得多:

GPT-3的监督微调:

为什么可以这么少? 因为预训练已经建立了语言能力,监督微调只是"教会"模型一个新的使用方式

数据质量的重要性

在监督微调阶段,质量远比数量重要。

举个例子。

低质量问答对:

问:"机器学习是什么?"
答:"机器学习就是机器学习人类的知识。" ← 废话,没有帮助

高质量问答对:

问:"机器学习是什么?"
答:"机器学习是让计算机从数据中自动学习规律的技术。
与传统编程不同,不需要告诉计算机每一步怎么做,
而是给它大量例子,让它自己总结规律。

举个例子:教计算机识别垃圾邮件。传统方法是人工
写规则('包含"免费领取"这类词的是垃圾邮件'),而机器
学习是给计算机看10万封标注好的邮件,让它自己学会
判断。" ← 清晰、准确、有例子

Tip

如果你经常使用DeepSeek等模型,你会发现他们特别有礼貌,也特别喜欢用项目符号将答案有序的整理,让人看起来层次分明,详略得当。而这些特点预训练阶段是学不会的(预训练只学知识,但不学什么是更好的回答),这些都是在监督微调阶段由人类"教"给他们的。

8.2 要素二:微调的训练任务

有了问答对数据,模型如何学习?

还是预测下一个Token——但现在的上下文变成了结构化的问答对。

训练样本的构造

以一个问答对为例,原始数据(人类编写):

问题: 什么是机器学习?
回答: 机器学习是一种人工智能技术

这里的问题和答案都是人类标注员手工编写的。OpenAI雇佣了大量标注员,让他们设计各种用户可能问的问题,为每个问题编写高质量的回答,确保回答准确、有帮助、安全。

这就是为什么监督微调的数据量远小于预训练(数万条 vs 3000亿Token)——每一条都需要人工成本。

Token化

["问题", ":", "什么", "是", "机器学习", "?", "\n",
"回答", ":", "机器学习", "是", "一种", "人工智能", "技术"]

生成多个训练样本

每个位置都是一个训练样本:

训练样本1:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":"]
目标: 预测下一个Token → "机器学习"

训练样本2:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习"]
目标: 预测下一个Token → "是"

训练样本3:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习", "是"]
目标: 预测下一个Token → "一种"

训练样本4:
输入: ["问题", ":", "什么", "是", "机器学习", "?", "\n", "回答", ":", "机器学习", "是", "一种"]
目标: 预测下一个Token → "人工智能"

...依次类推

训练过程

对于每个训练样本:

  1. 模型根据输入预测下一个Token
  2. 对比目标(人类给的正确答案)
  3. 计算错误
  4. 调整参数,让模型下次更可能预测出正确答案

关键的变化:上下文的结构

看起来好像和预训练没有太大的区别?其实不然。

预训练阶段,上下文是随机的文本片段。微调阶段,上下文被结构化为"问题-答案"的格式。

举个简单的例子。

预训练阶段看到的文本是杂乱无章的:

...编程语言有很多种。Python适合初学者。JavaScript用于网页开发。..

微调阶段看到的文本是结构化的问答对:

|问题| 如何学习编程?
|答案| 学习编程可以从以下步骤开始:1. 选择一门编程语言,推荐Python作为入门 2. 学习基本语法和数据结构 3. 通过小项目练习。..

通过大量看到这种"问题→答案"的模式,模型学会了识别"|问题|"标记后面是用户的提问,识别"|答案|"标记后面应该是有帮助的回答,并且在回答中采用清晰、结构化的方式。

这是他们本质的区别:有上下文环境。这样模型才能理解这种问答对,才能模仿人类提问时应该有的回答方式。

8.3 要素三:参数的微调更新

同预训练一样,既然他叫"监督微调",那就需要告诉模型参考人类给的标准答案,并让模型根据标准答案自己调整参数。但这一步也与预训练有区别:

┌──────────────────────────────────────
│ 预训练
├──────────────────────────────────────
│ 起点:参数从随机值开始
│ 幅度:大幅度调整
│ 数据量:训练数千亿个词
│ 成本:耗时数周,花费数百万美元
└──────────────────────────────────────

┌──────────────────────────────────────
│ 监督微调
├──────────────────────────────────────
│ 起点:参数从预训练结果开始(已经很好了)
│ 幅度:小幅度调整(精调)
│ 数据量:训练数万到数十万个问答对
│ 成本:耗时数小时到数天,花费数万到数十万美元
└──────────────────────────────────────

为什么微调比预训练便宜这么多

因为微调不是重新学习语言,而是在已有能力基础上"调整行为模式":

预训练 = 培养一个博学的人(需要读万卷书,耗时十几年)
微调 = 教这个博学的人"如何当老师"(只需要几个月的教学培训)

基础能力(语言理解)已具备,只是学习一个新的应用方式。

学习率的微小控制

微调时,学习率要非常小:

预训练的学习率:0.0001 (较大,因为从零开始)
微调的学习率: 0.00001 (很小,因为只是精调)

太大 → 破坏预训练学到的知识
太小 → 学不到新的任务模式

类似给一幅画精修:预训练是画出整幅画;微调是调整细节和色彩,如果修改太用力,会破坏原画。


8.4 ■ 学点英语

中文 English 音标 说明
问答对数据 QA Dataset /kjuː eɪ ˈdeɪtəsɛt/ 训练微调使用的问答格式标注数据集合
众包标注 Crowdsourced Annotation /ˈkraʊdsɔːrst ˌænəˈteɪʃən/ 通过互联网平台分发标注任务给大量自由职业者的方式
学习率 Learning Rate /ˈlɜːnɪŋ reɪt/ 控制参数更新幅度的超参数,微调时需远小于预训练
参数精调 Parameter Fine-Tuning /pəˈræmɪtər faɪn ˈtjuːnɪŋ/ 在已有参数基础上做微小调整而非重新训练
上下文结构化 Context Structuring /ˈkɒntekst ˈstrʌktʃərɪŋ/ 将训练数据组织成特定格式(如问题-答案)让模型学习任务模式

8.5 ■ 思考帧

监督微调(一)-概念与本质 监督微调(三)-对比与局限
本节目录